#!/usr/bin/env bash
set -e

# ------------------ 配置区 ------------------
# 修改为 Docker 20.10 版本 (适用于 Ubuntu 20.04 bionic 及以上)
#DOCKER_VERSION_BIONIC="5:20.10.24~3-0~ubuntu-bionic"   # 适配 glibc 2.27 的稳定旧版
# 修改为 Docker 18.09 版本 (适用于 Ubuntu 18.04 bionic)
DOCKER_VERSION_BIONIC="5:18.09.9~3-0~ubuntu-bionic"
CONTAINERD_VERSION="1.2.6-3"  # 对应 Docker 18.09 的 containerd 版本

REPO_URL="https://download.docker.com/linux/ubuntu"   # 官方仓库
# ------------------ 工具函数 ------------------
get_glibc_version() {
    ldd --version 2>/dev/null | head -n1 | awk '{print $NF}'
}

compare_versions () {
    # $1 >= $2 ? return 0 : return 1
    dpkg --compare-versions "$1" ge "$2"
}

detect_arch() {
    dpkg --print-architecture   # arm64、amd64等
}

add_docker_repo() {
    local codename="$1"
    local arch="$2"
    echo ">>> 添加 Docker 官方仓库 ($codename, arch=$arch)"
    apt-get update -y
    apt-get install -y apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
    add-apt-repository \
       "deb [arch=$arch] $REPO_URL $codename stable"
    apt-get update -y
}

install_old_docker_v2() {
    echo ">>> 安装适配 Ubuntu18 (glibc 2.27) 的 20.10.x 版本 Docker"
    apt-get install -y \
        docker-ce="$DOCKER_VERSION_BIONIC" \
        docker-ce-cli="$DOCKER_VERSION_BIONIC" \
        containerd.io
}

install_old_docker_offline() {
  curl -k -O  https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/containerd.io_1.2.6-3_arm64.deb
  curl -k -O  https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce_18.09.9~3-0~ubuntu-bionic_arm64.deb
  curl -k -O  https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce-cli_18.09.9~3-0~ubuntu-bionic_arm64.deb

  # 安装所有下载的 Docker 相关包
  dpkg -i docker-ce-cli_18.09.9~3-0~ubuntu-bionic_arm64.deb \
             docker-ce_18.09.9~3-0~ubuntu-bionic_arm64.deb \
             containerd.io_1.2.6-3_arm64.deb
}



install_old_docker() {
    echo ">>> 安装适配 Ubuntu18 (glibc 2.27) 的 18.09.x 版本 Docker"
    
    # 首先尝试安装指定版本的 containerd.io
    echo ">>> 安装 containerd.io 版本: $CONTAINERD_VERSION"
    apt-get install -y containerd.io=$CONTAINERD_VERSION || {
        echo "⚠️  无法安装指定版本 containerd.io，尝试安装可用版本..."
        # 如果指定版本失败，查看有哪些可用版本
        echo "可用的 containerd.io 版本:"
        apt-cache madison containerd.io | head -10
        echo "尝试安装较旧的 containerd.io 版本..."
        apt-get install -y containerd.io
    }
    
    # 然后安装指定版本的 Docker
    echo ">>> 安装 Docker 版本: $DOCKER_VERSION_BIONIC"
    apt-get install -y \
        docker-ce=$DOCKER_VERSION_BIONIC \
        docker-ce-cli=$DOCKER_VERSION_BIONIC
}

install_latest_docker() {
    echo ">>> 安装最新版 Docker"
    apt-get install -y docker-ce docker-ce-cli containerd.io
}

# ------------------ 主流程 ------------------
main() {
    GLIBC_VER=$(get_glibc_version)
    echo "检测到 glibc 版本: $GLIBC_VER"

    ARCH=$(detect_arch)
    CODENAME=$(lsb_release -cs)  # bionic、focal等
    echo "系统: Ubuntu $(lsb_release -rs) ($CODENAME) 架构: $ARCH"

    add_docker_repo "$CODENAME" "$ARCH"

    if compare_versions "$GLIBC_VER" "2.34"; then
        echo "glibc >= 2.34, 直接安装最新版 Docker..."
        install_latest_docker
    else
        echo "glibc < 2.34, 当前仓库新版本不兼容."
        if [ "$CODENAME" = "bionic" ]; then
            echo "为 Ubuntu 18.04 检测到旧版方案."
            install_old_docker
        else
            echo "⚠️ 当前系统非 bionic，且 glibc 过低，建议升级到 20.04+ 后再装最新 Docker."
            exit 1
        fi
    fi

    echo "✅ Docker 安装完成"
    docker --version || echo "请检查 docker 是否已正确安装"
}

main "$@"
}